package com.shop.cereshop.app.service.product;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.shop.cereshop.app.page.product.ProductVisitListVO;
import com.shop.cereshop.app.param.product.QueryProductVisitDTO;
import com.shop.cereshop.commons.domain.product.CereProductVisit;
import com.shop.cereshop.commons.result.Result;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 商品访问记录表 Service 接口
 */
public interface CereProductVisitService extends IService<CereProductVisit> {

    /**
     * 记录商品访问
     */
    Boolean saveProductVisit(CereProductVisit visit);

    /**
     * 查询用户浏览商品记录（新版）
     */
    Result<PageInfo<ProductVisitListVO>> getProductVisitPage(QueryProductVisitDTO queryDTO);

    /**
     * 清空用户访问记录
     */
    void clearByUserId(Long buyerUserId);

    /**
     * 删除用户访问记录
     */
    void deleteProductVisit(Long buyerUserId, Long visitId);

    /**
     * 批量删除用户访问记录
     */
    void batchDeleteProductVisit(Long buyerUserId, List<Long> visitIds);

    /**
     * 获取用户访问记录
     */
    List<CereProductVisit> getUserVisitHistory(Long userId);

    /**
     * 获取商品访问统计
     */
    Long getProductVisitCount(Long productId);

    /**
     * 获取用户对商品的访问记录
     */
    List<CereProductVisit> getUserProductVisits(Long userId, Long productId);

    /**
     * 获取热门商品列表
     */
    List<Map<String, Object>> getHotProducts(Integer limit);

    /**
     * 获取用户最近访问的商品
     */
    List<CereProductVisit> getRecentUserVisits(Long userId, Integer limit);

    /**
     * 清理过期访问记录
     */
    Integer cleanExpiredVisits(LocalDateTime expireTime);

    /**
     * 获取时间段内的访问统计
     */
    Map<String, Object> getVisitStatistics(LocalDateTime startTime, LocalDateTime endTime);


}
